/* This an the abstract base class all types of CPU Schedulers will derive from */
#ifndef SCHEDULER
#define SCHEDULER

#include "Process.h"
#include <vector>

using namespace std; 

class Abstract_CPUScheduler
{
    public:

		Abstract_CPUScheduler();
		~Abstract_CPUScheduler();
 
		void init(vector<Process*> newList);
		void sortProcesses();		
        void createCSVFile();
        void determineStats();
		void runScheduler();
		double getMeanWaitingTime();
		double getMeanTurnAroundTime();
		double getMeanResponseTime();
		Process getNextJob();

    protected:

        vector<Process> processList;
        /* Statistic Variables */
        double meanWaitingTime;
        double meanTurnAroundTime;
        double meanResponseTime;

        /* Called in sequence from public function determineStats() */
        void determineMeanWaitingTime();
        void determineMeanTurnAroundTime();
        void determineMeanResponseTime();

};

#endif
